#ifndef XBITMAP_H
#define XBITMAP_H

/************************************
 * Filename: xbitmap.h
 * Author  : xy_god
 * E-Mail  : xy_god@thesct.net
 * Datetime: 2017-05-04 15:33
 * Comment :
 *     该文件描述了Microsoft Bitmap
 * 位图结构。
 ************************************/

#include <QString>
#include <QFile>

typedef   struct   tagBITMAPFILEHEADER{
    unsigned   short  bfType;     // 文件类型字符串 "BM"
    unsigned   int    bfSize;     // 文件大小，字节为单位
    unsigned   short  bfReserved1;// 保留位，须为0
    unsigned   short  bfReserved2;// 保留位，须为0
    unsigned   int    bfOffBits;  // 文件头开始到实际的图象数据之间的字节的偏移量
} __attribute__((packed))
BITMAPFILEHEADER,   *PBITMAPFILEHEADER;

typedef   struct   tagBITMAPINFOHEADER{
    unsigned  int     biSize;         // BITMAPINFOHEADER结构所需要的字节数
    int               biWidth;        // 图象的宽度，以象素为单位
    int               biHeight;       // 图象的高度，以象素为单位
    unsigned short    biPlanes;       // bmp图片的平面数，恒等于1
    unsigned short    biBitCount;     // 位数/像素
    unsigned   int    biCompression;  // 压缩模式
    unsigned   int    biSizeImage;    // 图象的大小，以字节为单位（当用BI_RGB格式时，可设置为0）
    int               biXPelsPerMeter;// 水平分辨率，用象素/米表示
    int               biYPelsPerMeter;// 垂直分辨率，用象素/米表示
    unsigned   int    biClrUsed;      // 位图实际使用的彩色表中的颜色索引数（设为0的话，则说明使用所有调色板项）
    unsigned   int    biClrImportant; // 对图象显示有重要影响的颜色索引的数目，如果是0，表示都重要。
} __attribute__((packed))
BITMAPINFOHEADER,*PBITMAPINFOHEADER;

typedef   struct   tagRGBQUAD{
    unsigned   char   rgbBlue;    // 蓝色分量
    unsigned   char   rgbGreen;   // 绿色分量
    unsigned   char   rgbRed;     // 红色分量
    unsigned   char   rgbReserved;// 保留位
}   RGBQUAD;

class XBitmap
{
    public:
        explicit XBitmap();

        int load_img_file(QString img_path);

        QString get_img_path();
        unsigned long get_mt();
        unsigned long get_nt();
        unsigned long get_buf_size();
        char * get_buf();

    private:
        QString m_img_path;
        unsigned long m_mt;
        unsigned long m_nt;
        unsigned long m_buf_size;
        char * m_buf;
};

#endif // XBITMAP_H
